//–随着积分的增加，加快敌机的下落速度；–防止玩家操控飞机飞出边界；–尝试实现复杂的多字符飞机图形；- 增加按ESC键后游戏暂停的功能。 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include<iostream>

//函数外全局变量定义
int position_x,position_y;//位置 
int high,width;//游戏画面大小 
int bullet_x,bullet_y;//子弹位置 
int enemy_x,enemy_y;//敌机位置 
int score = -1; // 得分 

 
void gotoxy( int x,int y ) //光标移动到（x，y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos); 
} 
 
void HideCursor()//隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = {1,0}; //第二个值为0表示隐藏光标 
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info );
	
}
void startup() //数据初始化 
{
		high = 18;
	width = 30;
	
	 position_x = high/2;
	 position_y = width/2;  //位置 
	 bullet_y = position_y;  //子弹位置 
	 enemy_x = 0;
	 enemy_y = width/2;     //敌机位置 
	 
	 HideCursor(); //隐藏光标
}


void show()   //显示画面 
{
	 
	int i,j;
	
	gotoxy(0,0); // 光标移动到原点位置，以下重画清屏
	
	
	 
	for ( i=0; i<high; i++ )
	{
		for ( j=0; j<width; j++ )
		{
	
			 
			if ( (i==position_x) && (j==position_y)) //输出飞机*
				printf("*"); 
			if ( (i==position_x+1) && (j==position_y-2)) 
				printf("*****"); 
			if ( (i==position_x+2) && (j==position_y-1))
				printf("***"); 
			if ( (i==bullet_x) && (j==bullet_y))
				printf("|"); //输出子弹| 
			if ( (i==enemy_x) && (j==enemy_y))
				printf("@"); //输出敌机@ 
			else 
				printf(" ");//输出 空格 
		}
		printf("\n");
	}
}

void updateWithoutInput() //与用户输入无关的更新 
{
	if ( (bullet_x==enemy_x) && (bullet_y==enemy_y) ) //击中敌机 
		{
			score++;
			enemy_x = 0;
			enemy_y = rand() % width-2;  //敌机重置 
			bullet_x = -1;    //子弹击中消失 
			printf("\a");   //击中子弹发出声音 
		}
		
	static int speed=0; // 控制敌机速度 
	
	int t = 30;  //敌机速度变化 
	{ 
	
			if ( score % 3 == 0  )
				t = t - 3;  //加速
		
	 
			if ( t == 3 )
			const int t = 3;     //固定速度 
				
		
	}  
	
	if ( bullet_x > -1)
		bullet_x--;   //子弹上升 
		
	if ( enemy_x > high )
	{
		enemy_x = 0;       
		enemy_y = rand() % width;   //子弹随机重现 
	}

	if ( speed < t)
		speed++;   //准备加速 
	
	else 
	{
		if ( speed == t )
		{
			enemy_x++;  //敌机下落 
			speed = 0;     //重置加速 
		}	
	}
	

	

		
	printf("得分:%d",score);//显示得分 

}

void updateWithInput() //与用户输入有关的更新 
{
	char input;
	
	if ( kbhit() )//当按键被按下
	{
		input = getch();
		
		if ( ( input == 'a' ) && ( position_y > 2 ) ) //移动 
			position_y--;
		if ( ( input == 'w' ) && ( position_x > 1 ) )
			position_x--;
		if ( ( input == 's' ) && ( position_x < high-3 ) )
			position_x++;
		if ( ( input == 'd' ) && ( position_y < width-2 ) )
			position_y++;
		if ( input == ' ' )
		{ 
			 bullet_x = position_x-1;
			 bullet_y = position_y;
		} 
		if ( input == 27 )
			system("pause");  //暂停 
	} 
}


int main()
{
	startup();  //数据初始化 
	while(1)  //游戏循环执行 
	{
		show();  //显示画面 
		updateWithoutInput();  //与用户输入无关的更新 
		updateWithInput();  //与用户输入有关的更新 
		HideCursor(); //隐藏光标 
	} 


	return 0;
}
